Webframework/Spring Boot/Dependency Injection in reinem Java ohne Interfaces
1. Was ist Dependency Injection?
Dependency Injection (DI) ist ein Entwurfsmuster, bei dem Abhängigkeiten (Objekte, die eine Klasse benötigt) von außen bereitgestellt werden, anstatt sie innerhalb der Klasse selbst zu erzeugen. Das erhöht die Flexibilität und Testbarkeit des Codes.
2. Beispiel ohne DI
class Motor {
public void starten() {
System.out.println("Motor startet...");
}
}
class Auto {
private Motor motor = new Motor(); // direkte Instanziierung
public void fahren() {
motor.starten();
System.out.println("Auto fährt los!");
}
}
Problem: Die Klasse Auto ist fest an die Klasse Motor gekoppelt. Ein Austausch ist schwierig.
3. Beispiel mit DI (Konstruktor-Injektion)
class Motor {
public void starten() {
System.out.println("Motor startet...");
}
}
class Auto {
private Motor motor;
// Dependency Injection über den Konstruktor
public Auto(Motor motor) {
this.motor = motor;
}
public void fahren() {
motor.starten();
System.out.println("Auto fährt los!");
}
}
// Anwendung
public class Main {
public static void main(String[] args) {
Motor motor = new Motor();
Auto auto = new Auto(motor); // Motor wird von außen injiziert
auto.fahren();
}
}
Vorteil: Die Klasse Auto ist nicht mehr für die Erzeugung des Motors verantwortlich. Der Motor kann leicht ausgetauscht oder gemockt werden.
4. Setter-Injektion
class Auto {
private Motor motor;
public void setMotor(Motor motor) {
this.motor = motor;
}
public void fahren() {
if (motor != null) {
motor.starten();
System.out.println("Auto fährt los!");
} else {
System.out.println("Kein Motor vorhanden!");
}
}
}
Vorteil: Die Abhängigkeit kann auch nach der Instanziierung gesetzt oder geändert werden.
5. Übung
Aufgabe:
- Erstelle eine Klasse
Radiomit einer Methodeeinschalten(). - Erweitere die Klasse
Autoso, dass einRadioper Konstruktor-Injektion übergeben wird. - Beim Aufruf von
fahren()soll zuerst das Radio eingeschaltet und dann der Motor gestartet werden.
Lösungsvorschlag:
class Radio {
public void einschalten() {
System.out.println("Radio läuft!");
}
}
class Motor {
public void starten() {
System.out.println("Motor startet...");
}
}
class Auto {
private Motor motor;
private Radio radio;
public Auto(Motor motor, Radio radio) {
this.motor = motor;
this.radio = radio;
}
public void fahren() {
radio.einschalten();
motor.starten();
System.out.println("Auto fährt los!");
}
}
public class Main {
public static void main(String[] args) {
Motor motor = new Motor();
Radio radio = new Radio();
Auto auto = new Auto(motor, radio);
auto.fahren();
}
}
Zusammenfassung
- Dependency Injection trennt die Erzeugung von Abhängigkeiten von deren Verwendung.
- In Java kann DI einfach über Konstruktoren oder Setter umgesetzt werden.
- Das Muster erhöht die Flexibilität und Testbarkeit des Codes.
Kategorien:
Keine
Zuletzt aktualisiert am 01.03.2026 19:45